home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Workspace / Locus / Source / ActivatorBar.m < prev    next >
Text File  |  1995-06-12  |  5KB  |  256 lines

  1.  
  2. /*
  3.     Copyright 1993  Jeremy Slade.
  4.  
  5.     You are free to use all or any parts of the Locus project
  6.     however you wish, just give credit where credit is due.
  7.     The author (Jeremy Slade) shall not be held responsible
  8.     for any damages that result out of use or misuse of any
  9.     part of this project.
  10.  
  11. */
  12.  
  13. /*
  14.     Project: Locus
  15.  
  16.     File: ActivatorBar.m
  17.  
  18.     Description: See ActivatorBar.m
  19.  
  20.     Original Author: Jeremy Slade
  21.  
  22.     Revision History:
  23.         Created
  24.             V.101    JGS Tue Feb  2 18:42:19 GMT-0700 1993
  25.  
  26. */
  27.  
  28.  
  29. #import "ActivatorBar.h"
  30.  
  31. #import "ActivatorBarView.h"
  32. #import "FolderController.h"
  33. #import "Globals.h"
  34. #import "PSWraps.h"
  35.  
  36.  
  37. @implementation ActivatorBar
  38.  
  39.  
  40. // -------------------------------------------------------------------------
  41. //   Creating and initializing
  42. // -------------------------------------------------------------------------
  43.  
  44.  
  45. + initialize
  46. {
  47.     [self setVersion:ActivatorBar_VERSION];
  48.     return ( self );
  49. }
  50.  
  51.  
  52.  
  53. - initAt:(int)position
  54. {
  55.     [self initContent:NULL
  56.         style:NX_PLAINSTYLE // No title bar
  57.         backing:NX_BUFFERED
  58.         buttonMask:0
  59.         defer:NO];
  60.  
  61.     [[[self setFreeWhenClosed:NO]
  62.         setHideOnDeactivate:NO]
  63.         setBecomeKeyOnlyIfNeeded:YES];
  64.     [[self setContentView:[[ActivatorBarView alloc] initFrame:NULL]]
  65.         free]; // Free the previous content view
  66.         
  67.     [self setPosition:position];
  68.     return ( self );
  69. }
  70.  
  71.  
  72.  
  73. - free
  74. {
  75.     return ( [super free] );
  76. }
  77.  
  78.  
  79.  
  80. // -------------------------------------------------------------------------
  81. //   Displaying
  82. // -------------------------------------------------------------------------
  83.  
  84.  
  85. #define BAR_VWID    5
  86. #define BAR_HWID    5
  87. - setPosition:(int)position
  88. /*
  89.     This method moves and resizes the bar so that it will lay along the edge of the screen specified by the position value -- None, Left, Right, Top, or Bottom.  It asks NXApp for the current screen size, so that it can adjust to different size screens.  The bar also checks the floatActivator global variable to see which window tier it should display in.  If floatActivator is YES, the bars will be shown in the same tier as the standard Dock (tier 5).  Otherwise, they will be in the standard window tier (tier 0).
  90. */
  91. {
  92.     NXRect rect;
  93.     unsigned int winNum;
  94.     NXSize screen;
  95.  
  96.     pos = position;
  97.     
  98.     if ( pos == ABAR_NONE ) {
  99.         [self orderOut:self];
  100.         return ( self ); // No bar
  101.     }
  102.     
  103.     // Set frame rect according to position
  104.     [NXApp getScreenSize:&screen];
  105.     if ( pos == ABAR_TOP ||
  106.         pos == ABAR_BOTTOM ) {
  107.         // Horizontal bar
  108.         NXSetRect ( &rect, 0, 0, screen.width, BAR_VWID ); // Bottom of screen
  109.         if ( pos == ABAR_TOP )
  110.             rect.origin.y = screen.height - BAR_VWID; // Top of screen
  111.     } else {
  112.         // Vertical bar
  113.         NXSetRect ( &rect, 0, 0, BAR_HWID, screen.height ); // Left of screen
  114.         if ( pos == ABAR_RIGHT )
  115.             rect.origin.x = screen.width - BAR_HWID; // Right of screen
  116.     }
  117.     [self placeWindow:&rect];
  118.  
  119.     // Raise the activator bar to the proper tier
  120.     NXConvertWinNumToGlobal ( [self windowNum], &winNum );
  121.     if ( floatActivator ) PSsettier ( 5, winNum ); // Same tier as Dock
  122.         else PSsettier ( 0, winNum ); // Standard tier for windows
  123.     
  124.     [self disableFlushWindow];
  125.     [self display];
  126.     [self reenableFlushWindow];
  127.  
  128.     return ( self );
  129. }
  130.  
  131.  
  132.  
  133. - setColor:(NXColor)color
  134. {
  135.     [contentView setColor:color];
  136.     return ( self );
  137. }
  138.  
  139.  
  140.  
  141. - setBorderColor:(NXColor)color
  142. {
  143.     [contentView setBorderColor:color];
  144.     return ( self );
  145. }
  146.  
  147.  
  148.  
  149. - show:sender
  150. {
  151.     // Always put bar at back of screen list
  152.     if ( pos != ABAR_NONE ) [self orderBack:self];
  153.     return ( self );
  154. }
  155.  
  156.  
  157.  
  158. - hide:sender
  159. {
  160.     [self orderOut:sender];
  161.     return ( self );
  162. }
  163.  
  164.  
  165.  
  166. // -------------------------------------------------------------------------
  167. //   Trapping mouseDown
  168. // -------------------------------------------------------------------------
  169.  
  170.  
  171. - barHit:sender
  172. /*
  173.     Sent by the ActivatorBarView when it receives a mouseDown -- notify our delegate.
  174. */
  175. {
  176.     if ( [delegate respondsTo:@selector(barHit:)] ) [delegate barHit:self];
  177.     return ( self );
  178. }
  179.  
  180.  
  181.  
  182. // -------------------------------------------------------------------------
  183. //   NXDraggingDestination Protocol - forward to dragDelegate
  184. // -------------------------------------------------------------------------
  185.  
  186.  
  187. - (NXDragOperation)draggingEntered:(id <NXDraggingInfo>)sender
  188. {
  189.     [folderController setDragDest:activator];
  190.     return ( [folderController draggingEntered:sender] );
  191. }
  192.  
  193.  
  194.  
  195.  
  196. - (NXDragOperation)draggingUpdated:(id <NXDraggingInfo>)sender
  197. {
  198.     return ( [folderController draggingUpdated:sender] );
  199. }
  200.  
  201.  
  202.  
  203.  
  204. - draggingExited:(id <NXDraggingInfo>)sender
  205. {
  206.     return ( [folderController draggingExited:sender] );
  207. }
  208.  
  209.  
  210.  
  211.  
  212. - (BOOL)prepareForDragOperation:(id <NXDraggingInfo>)sender
  213. {
  214.     return ( [folderController prepareForDragOperation:sender] );
  215. }
  216.  
  217.  
  218.  
  219.  
  220. - (BOOL)performDragOperation:(id <NXDraggingInfo>)sender
  221. {
  222.     return ( [folderController performDragOperation:sender] );
  223. }
  224.  
  225.  
  226.  
  227.  
  228. - concludeDragOperation:(id <NXDraggingInfo>)sender
  229. {
  230.     return ( [folderController concludeDragOperation:sender] );
  231. }
  232.  
  233.  
  234.  
  235.  
  236. // -------------------------------------------------------------------------
  237. //   Misc
  238. // -------------------------------------------------------------------------
  239.  
  240.  
  241. - (BOOL)canBecomeKeyWindow
  242. {
  243.     return ( NO );
  244. }
  245.  
  246.  
  247.  
  248. - (BOOL)canBecomeMainWindow
  249. {
  250.     return ( NO );
  251. }
  252.  
  253.  
  254.  
  255. @end
  256.